package demo.command;

/**
 * 模拟cpu使用率增高
 *
 * @author zheng9feng
 * @date 2021/5/10 13:30
 * <p>
 * 定位java进程中某个线程
 * # shift+m 按使用内存排序 shift+p 按cpu使用率排序
 * top
 * # 定位到cpu使用率高的进程id
 * 29072
 * # 查询指定进程下的线程
 * top -Hp 29072
 * # 定位到指定线程
 * 41044
 * # 线程进制转换:十进制转十六进制
 * printf '%x\n' 41044
 * a054 # 线程转换成十六进制的原因：jstack的线程转储快照中线程id是十六进制：nid=0x 转成十六进制是为了grep定位指定线程
 * # 使用jstack命令查看线程信息 jstack pid | grep 十六进制线程tid
 * jstack 29072 | grep a054 -C 5 > threaddump.txt
 */
public class CPUReap {
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			Thread thread = new Thread(() -> {
				System.out.println(Thread.currentThread().getName());
				try {
					Thread.sleep(30 * 60 * 1000);
				} catch (Exception e) {
					e.printStackTrace();
				}
			});
			thread.setName("thread-" + i);
			thread.start();
		}
		
		Thread highCpuThread = new Thread(() -> {
			int i = 0;
			while (true) {
				i++;
			}
		});
		highCpuThread.setName("HighCpu");
		highCpuThread.start();
	}
}
